#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIntValidator>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDateTime>
#include <QTimer>
#include <QLabel>
#include <QLineEdit>
#include <QTextBrowser>
#include <QMessageBox>
#include <QStandardPaths>
#include "comProtocol.h"
#include "qlcdnumber.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

enum logType{
    Type_Send=1,
    Type_Received=2
};
class Widget : public QWidget
{
    Q_OBJECT
    Q_ENUM(logType)

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:   
    void Control_port();//打开串口
    void Clear();//清除内容
    void Send_all_data2Serial();//发送数据到串口
    void Device1_zeroSetting();//设备1置0
    void Device2_zeroSetting();//设备2置0
    void Device3_zeroSetting();//设备3置0
    void Device4_zeroSetting();//设备4置0
    void DeviceAll_zeroSetting();//设备1、2、3、4同时置0
    void onCheckBoxStateChanged(int state);//勾选框状态
    void portRecvData();//串口数据处理
    void on_device1_changeDegree_clicked();//设备1单独处理
    void on_device2_changeDegree_clicked();//设备2单独处理
    void on_device3_changeDegree_clicked();//设备3单独处理
    void on_device4_changeDegree_clicked();//设备4单独处理
    void updateSerialPort();//更新串口号更新
    void handleSerialerrs(QSerialPort::SerialPortError error);//串口异常处理
    void updateSystemTime();//更新系统时间

private:
    Ui::Widget *ui;

private:
     int cur_degree1=0,cur_degree2=0,cur_degree3=0,cur_degree4=0;
     QSerialPort globalPort;
     bool check,globalCheckBoxState=false;
     SendPack sendpackage;
     QTimer *com_Timer,*sysTimer;
     QStringList oldPortStringList;

private:
     void Serial_Init();//串口初始化配置
     void System_Init();//系统初始化配置
     QVector<int> convertGroups(const QString &str);//解析16进制数据
     void logData(const QByteArray &data, logType Type);//数据显示到控件
     void updateLabel(QLabel *label, const QString &text, const QString &color);//串口状态更新
     void setupInputField(QLineEdit *inputField, QValidator *validator, int maxLength);//LineEdit输入设置
     void setupLcdNumber(QLCDNumber *lcdNumber,int digitCount);//QLCDNumber设置
     void Savelog();//保存数据
};
#endif // WIDGET_H
